package com.stars.questions.deptQuestion.config.service;

import com.alibaba.fastjson2.JSONObject;
import com.stars.questions.deptQuestion.config.entity.Question;
import com.stars.questions.deptQuestion.config.entity.QuestionConfigDTO;
import com.stars.questions.deptQuestion.config.entity.QuestionSub;
import com.stars.questions.deptQuestion.publish.entity.Reply;

import java.util.List;
import java.util.Set;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/10/2 19:52
 * @description : 问卷配置服务接口
 */
public interface QuestionConfigService {

    /**
     * 加载全部调查配置数据
     * @author : Rocks
     * @date :  2022/10/2 21:47
     * @return JSONObject list-列表数据 total-总数
     */
    JSONObject data(QuestionConfigDTO dto);

    /**
     * 检验指定年度是否有已发布问卷
     * @author : Rocks
     * @date :  2023/2/27 20:21
     * @param year 调查年度
     * @return boolean 存在-true 不存在-false
     */
    boolean check(String year);

    /**
     * 发布问卷
     * @author : Rocks
     * @date :  2023/2/27 20:23
     * @param id 要发布问卷ID
     * @return JSONObject
     */
    JSONObject publish(String id);

    /**
     * 取消发布问卷
     * @author : Rocks
     * @date :  2023/2/27 20:24
     * @param id 要取消发布问卷ID
     * @return boolean
     */
    boolean unPublish(String id);

    /**
     * 获取已发布问卷实体
     * @author : Rocks
     * @date :  2023/2/27 20:25
     * @return Question
     */
    Question getPublishQuestion();

    /**
     * 保存配置数据
     * @author : Rocks
     * @date :  2022/10/2 22:00
     * @return JSONObject
     */
    boolean save(Question bean);

    /**
     * 删除数据
     * @author : Rocks
     * @date :  2022/10/2 23:01
     * @param id 要删除的数据
     * @return JSONObject
     */
    boolean delRecord(String id);

    /**
     * 根据问卷ID加载问卷实体
     * @author : Rocks
     * @date :  2023/2/27 20:32
     * @param id 问卷ID
     * @return Question
     */
    Question loadQuestion(String id);

    /**
     * 根据问卷ID和模板生成问卷信息
     * @author : Rocks
     * @date :  2023/2/27 22:11
     * @param id 问卷ID
     * @param mark 模板
     * @return List<QuestionSub>
     */
    List<QuestionSub> loadQuestionSub(String id, String mark);

    /**
     * 删除指定问卷子表记录
     * @author : Rocks
     * @date :  2023/2/27 22:12
     * @param subId 要删除的子表记录ID
     * @return boolean
     */
    boolean deleteSub(String subId);

    /**
     * 初始化问卷部门信息
     * @author : Rocks
     * @date :  2023/2/27 22:12
     * @param id 要初始化问卷ID
     * @return boolean
     */
    boolean initDept(String id);

    /**
     * 随机抽取当前问卷指定数量的问卷序号
     * @author : Rocks
     * @date :  2023/2/27 22:13
     * @param question 指定问卷
     * @param questionCount 要抽取问卷的数量
     * @return Set<Integer> 抽取问卷序号集合
     */
    Set<Integer> generateRandomNum(Question question, int questionCount);


    /**
     * 功能描述: 当前问卷同手机号只能提交一次
     * @param:
     * @return:
     * @auther: Administrator
     * @date: 2023/12/4 10:43
     */
    boolean checkSubmit(Reply reply);
}
